
package com.hd2tecnologia.modeloBanco;

import com.hd2tecnologia.entidades.Produto;
import com.hd2tecnologia.banco.AcessoBanco;
import com.hd2tecnologia.entidades.Fornecedor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Dulcyelliton Silva
 */
public class ProdutoBD {

    private PreparedStatement ps;
    private Connection con;
    private ResultSet rs;
    private AcessoBanco acessoBD = new AcessoBanco();
    private String consultaProduto = "select p.*, f.* from produto p join fornecedor f on p.id_fornecedor = f.id";
    private String consultaProdutoNome = "select p.*, f.* from produto p join fornecedor f on p.id_fornecedor = f.id where p.nome like ?";
    private String incluiProduto = "insert into produto (nome, id_fornecedor, qtde_estoque, valor) values(?, ?, ?, ?)";
    private String alteraProduto = "update produto set nome = ?, id_fornecedor = ?, qtde_estoque = ?, valor = ? where produto.id = ?";
    private String excluiProduto = "delete from produto where produto.id = ?";

    public List<Produto> consultaProduto() {
        List<Produto> listaProdutos = new ArrayList<Produto>();
        Produto produto;
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaProduto);
            rs = ps.executeQuery();
            while (rs.next()) {
                produto = new Produto();
                produto.setId(rs.getInt("p.id"));
                produto.setNome(rs.getString("p.nome"));
                produto.setQtdeEstoque(rs.getInt("p.qtde_estoque"));
                produto.setValor(rs.getDouble("p.valor"));

                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setId(rs.getInt("f.id"));
                fornecedor.setNome(rs.getString("f.nome"));
                fornecedor.setEndereco(rs.getString("f.endereco"));
                fornecedor.setBairro(rs.getString("f.bairro"));
                fornecedor.setCidade(rs.getString("f.cidade"));
                fornecedor.setCep(rs.getString("f.cep"));
                fornecedor.setUf(rs.getString("f.uf"));
                fornecedor.setTelefone(rs.getString("f.telefone"));
                fornecedor.setEmail(rs.getString("f.email"));

                produto.setFornecedor(fornecedor);

                listaProdutos.add(produto);
            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaProdutos;
    }

    public List<Produto> consultaProduto(String nome) {
        List<Produto> listaProdutos = new ArrayList<Produto>();
        Produto produto;
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaProdutoNome);
            nome = "%" + nome + "%";
            ps.setString(1, nome);
            rs = ps.executeQuery();
            while (rs.next()) {
                produto = new Produto();
                produto.setId(rs.getInt("p.id"));
                produto.setNome(rs.getString("p.nome"));
                produto.setQtdeEstoque(rs.getInt("p.qtde_estoque"));
                produto.setValor(rs.getDouble("p.valor"));

                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setId(rs.getInt("f.id"));
                fornecedor.setNome(rs.getString("f.nome"));
                fornecedor.setEndereco(rs.getString("f.endereco"));
                fornecedor.setBairro(rs.getString("f.bairro"));
                fornecedor.setCidade(rs.getString("f.cidade"));
                fornecedor.setCep(rs.getString("f.cep"));
                fornecedor.setUf(rs.getString("f.uf"));
                fornecedor.setTelefone(rs.getString("f.telefone"));
                fornecedor.setEmail(rs.getString("f.email"));

                produto.setFornecedor(fornecedor);

                listaProdutos.add(produto);
            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaProdutos;
    }

    public boolean incluiProduto(Produto produto) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(incluiProduto);

            ps.setString(1, produto.getNome());
            ps.setInt(2, produto.getFornecedor().getId());
            ps.setInt(3, produto.getQtdeEstoque());
            ps.setDouble(4, produto.getValor());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean alteraProduto(Produto produto) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(alteraProduto);

            ps.setString(1, produto.getNome());
            ps.setInt(2, produto.getFornecedor().getId());
            ps.setInt(3, produto.getQtdeEstoque());
            ps.setDouble(4, produto.getValor());
            ps.setInt(5, produto.getId());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean excluiProduto(Produto produto) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(excluiProduto);

            ps.setInt(1, produto.getId());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }
}
